import logging

from django.conf import settings
from django.core.files.storage import Storage
from django.utils.deconstruct import deconstructible

from . import image_storage

logger = logging.getLogger('django')


@deconstructible
class QINIUStorage(Storage):
    def __init__(self, base_url=None):
        """
        初始化
        :param base_url: 用于构造图片完整路径使用，图片服务器的域名
        :param client_conf: FastDFS客户端配置文件的路径
        """
        if base_url is None:
            base_url = settings.QINIU_URL
        self.base_url = base_url

    def _open(self, name, mode='rb'):
        """
        用不到打开文件，所以省略
        """
        pass

    def _save(self, name, content):
        """
        在七牛云中保存文件
        :param name: 传入的文件名
        :param content: 文件内容
        :return: 保存到数据库中的七牛云的文件名
        """
        try:

            file_name = image_storage.storage(content.read())
        except Exception as e:
            logger.error(e)
            file_name = None

        if file_name is None:
            raise Exception("upload file failed")

        return file_name

    def url(self, name):
        """
        返回文件的完整URL路径
        :param name: 数据库中保存的文件名
        :return: 完整的URL
        """
        return self.base_url + name

    def exists(self, name):
        """
        判断文件是否存在，FastDFS可以自行解决文件的重名问题
        所以此处返回False，告诉Django上传的都是新文件
        :param name:  文件名
        :return: False
        """
        return False
